package class07;

/**
 * 请吧一段纸条竖着放在桌子上, 然后从纸条的下边向上方对折1次, 压出折痕后展开
 * 此时折痕是凹下去的, 即折痕凸起的方向指向纸条的背面.
 * 如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕和上折痕
 *
 * 给定一个输入参数N,代表纸条都从下边向上方连续对折N次.请从上到下打印所有折痕方向
 * 例如:N=1时,打印 down; N=2时,打印:down down up
 *
 * 思路:
 * 1凹
 * 2凹  1凹  2凸
 * 3凹  2凹  3凸  1凹  3凹   2凸  3凸
 *
 * 会发现每次旧折痕的上方会出现新的凹折痕, 每次旧折痕的下方会出现新的凸折痕
 * 即:
 *           1凹
 *     2凹         2凸
 *  3凹  3凸    3凹   3凸
 *
 *  完成这颗树的中序遍历即可
 *
 */
public class Code08_PaperFolding {

	public static void printAllFolds(int N) {
		printProcess(1, N, true);
	}

	// 递归过程，来到了某一个节点，
	// i是节点的层数，N一共的层数，down == true  凹    down == false 凸
	public static void printProcess(int i, int N, boolean down) {
		if (i > N) {
			return;
		}
		//折痕上方为凹
		printProcess(i + 1, N, true);
		System.out.println(down ? "凹 " : "凸 ");
		//折痕下方为凸
		printProcess(i + 1, N, false);
	}

	public static void main(String[] args) {
		int N = 3;
		printAllFolds(N);
	}
}
